import TimeManager from "./TimeManager";
import TimeHelper from "./TimeHelper";
export default abstract class TimeObserver  {

    // 倒计时时间 单位秒  由于服务器返回的是秒，而时间管理器需要毫秒 所以注意时间转换。
    protected time;

    //回调函数
    protected func:Function;

    //time为0时 是否从时间管理器中移除。
    protected autoDelete:boolean = true;

    protected runnigFlag : boolean = false;

    protected manager:TimeManager;

    // //递增还是递减
    // private updateType:TimeUpdateType = TimeUpdateType.SUB;

    constructor(manager:TimeManager,func:Function){
        this.func = func;
        this.time = 0;
        this.manager = manager;
    }

    start(){
        if(!this.runnigFlag && this.manager){
            this.manager.addTimeListener(this);
            this.runnigFlag = true;
        }
    }

    isRunning(){
        return this.runnigFlag;
    }

    stop(){
        if(this.runnigFlag && this.manager){
            this.runnigFlag = false;
            this.manager.removeTimeListener(this);
        }
    }
    /**
     * 当前时间一定要小于endTime才有意义。
     * @param endTime 活动结束时间 单位秒
     */
    setEndTime(endTime:number){
        this.time =  Math.floor(TimeHelper.leftTime(endTime)/1000);
        if(this.time < 0 ){
            this.time = 0;
        }
        cc.log("this.time   ",this.time ," endTime ",endTime );
    }

    setTime(time:number){
        this.time = time;
    }

    /**
     * 一定要小于当前时间才有意义。
     * @param startTime 经过的时间
     */
    setStartTime(startTime: number){
        this.time =  Math.floor(TimeHelper.startTime(startTime)/1000);
    }


    abstract update(dt:number):void


    setAutoDelete(flag:boolean){
        this.autoDelete = flag;
    }

    isAutoDelete(){
        return this.autoDelete;
    }

    getTime(){
        return this.time;
    }

 

}
